package som.simon.reactor;

import reactor.core.publisher.Flux;

public class ErrorMain {

    public static void main(String[] args) {

        Flux<Integer> map = Flux.range(-1, 10)
                .map(i -> 10 / i);


        // map.onErrorReturn(0)
        // map.onErrorReturn(ArithmeticException.class, 0)
        // map.onErrorReturn(
        //                 throwable -> throwable.getClass().getName().equals(ArithmeticException.class.getName()),
        //                 -10000
        //         )

        // map.onErrorResume(err -> Flux.just(9999))
        // map.onErrorResume(ArithmeticException.class, err -> Flux.just(9999))
        // map.onErrorResume(NullPointerException.class, err -> Flux.just(9999))
        // map.onErrorResume(
        //                 // throwable -> throwable.getClass().getName().equals(ArithmeticException.class.getName()),
        //                 throwable -> throwable.getClass().getName().equals(NullPointerException.class.getName()),
        //                 throwable -> Flux.just(99999)
        //         )

        // map.onErrorStop()

        // map.onErrorComplete()
        // map.onErrorComplete(ArithmeticException.class)
        // map.onErrorComplete(throwable -> throwable.getClass().getName().equals(ArithmeticException.class.getName()))

        // map.onErrorMap(BusinessException::new)
        // map.onErrorMap(ArithmeticException.class, BusinessException::new)
                // .onErrorReturn(8888)

        map.onErrorContinue((err, ix) -> {
                    // ix： 上游值
                    System.out.println("ix = " + ix + ", err: " + err.getMessage());
                })

                .subscribe(
                        ix -> System.out.println("ix = " + ix),
                        err -> System.out.println("err = " + err),
                        () -> System.out.println("complete...")
                );


    }

}
